#include "BinarySearchTree.hpp"

//void test1()
//{
//  BSTree<int> T1;
//  T1.Insert(5);
//  T1.Insert(3);
//  T1.Insert(1);
//  T1.Insert(4);
//  T1.Insert(7);
//  T1.Insert(6);
//  T1.Insert(8);
//  T1.Insert(8);
//  T1.InOrder();
//
//  BSTree<int> T2(T1);
//  T2.InOrder();
//  T2.DestroyTree();
//
//  T1.InOrder();
//
//  T2.Insert(5);
//  T2.Insert(3);
//  T2.Insert(6);
//  T2.Insert(1);
//  T2.Insert(4);
//  T2.Insert(7);
//  T2.InOrder();
//
//  BSTree<int> T3;
//  T3=(T2=T1);
//  T1.InOrder();
//  T2.InOrder();
//  T3.InOrder();
//
//}

//void test2()
//{
//  int arr[]={5,3,1,4,7,6,8};
//  BSTree<int> T;
//  for(auto e:arr)
//  {
//    T.Insert(e);
//  }
//  T.InOrder();
//  for(auto e:arr)
//  {
//    T.Erase(e);
//  }
//  T.InOrder();
//  for(auto e:arr)
//  {
//    T.Insert(e);
//  }
//  T.InOrder();
//
//}

void test3()
{
  BSTree<int> T;
  int arr[]={5,3,1,4,7,6,8};
  for(auto e:arr)
  {
    T.InsertR(e);
  }
  T.InOrder();
  T.DestroyTree();
  for(auto e:arr)
  {
    T.InsertR(e);
  }
  T.InOrder();
}

void test4()
{
  
  BSTree<int> T;
  int arr[]={5,3,1,4,7,6,8};
  for(auto e:arr)
  {
    T.InsertR(e);
  }
  T.InOrder();
  std::cout<<T.FindKR(1)<<std::endl;
  std::cout<<T.FindKR(9)<<std::endl;
  std::cout<<T.FindKR(3)<<std::endl;
  std::cout<<T.FindKR(0)<<std::endl;
}

void test5()
{
  int arr[]={5,3,1,4,7,6,8};
  BSTree<int> T;
  for(auto e:arr)
  {
    T.InsertR(e);
  }
  T.InOrder();
  for(auto e:arr)
  {
    T.EraseR(e);
  }
  T.InOrder();
  for(auto e:arr)
  {
    T.InsertR(e);
  }
  T.InOrder();
}

int main()
{
  test5();
  return 0;
}
